package br.com.scmimebr.sessionBean;

import java.util.List;

import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

import br.com.scmimebr.entity.Dizimo;
import br.com.scmimebr.entity.Membro;

@Stateless
public class DizimoSessionBean {
	
	@PersistenceContext
	private EntityManager entityManager;
	
	public void dizimar(Dizimo dizimo){
		Membro membro = entityManager.find(Membro.class, dizimo.getMembro().getIdMembro());
		dizimo.setMembro(membro);
		dizimo.setIdDizimo(0);
		entityManager.persist(dizimo);
	}
	public void alterarDizimo(Dizimo dizimo) {
		entityManager.merge(dizimo);
	}
	
	public void excluirDizimo(Dizimo dizimo){
		dizimo = entityManager.find(Dizimo.class, dizimo.getIdDizimo());
		entityManager.remove(dizimo);
	}
	
	@SuppressWarnings("unchecked")
	public List<Dizimo> consultarTodosDizimos() {
		Query query = entityManager.createNamedQuery("Dizimo.consultarTodosDizimos");
		try {
			return query.getResultList();
		} catch (NoResultException e) {
			return null;
		}
	}
	
	public Dizimo consultarDizimoMembroMesAno(Long mes, Long ano, long idMembro){
		Query query = entityManager.createQuery("select d from Dizimo d where MONTH(d.periodoReferente) = :mes and year(d.periodoReferente) = :ano and d.membro.idMembro = :idMembro");
		query.setParameter("mes", mes.intValue());
		query.setParameter("ano", ano.intValue());
		query.setParameter("idMembro", idMembro);
		try {
			return (Dizimo) query.getSingleResult();
		} catch (NoResultException e) {
			return null;
		}
	}
	@SuppressWarnings("unchecked")
	public List<Dizimo> consultarListaDizimoMembroMes(Long mes, long idMembro){
		Query query = entityManager.createQuery("select d from Dizimo d where MONTH(d.periodoReferente) = :mes and d.membro.idMembro = :idMembro");
		query.setParameter("mes", mes.intValue());
		query.setParameter("idMembro", idMembro);
		try {
			return query.getResultList();
		} catch (NoResultException e) {
			return null;
		}
	}
	@SuppressWarnings("unchecked")
	public List<Dizimo> consultarListaDizimoMembroAno(Long ano, long idMembro){
		Query query = entityManager.createQuery("select d from Dizimo d where year(d.periodoReferente) = :ano and d.membro.idMembro = :idMembro");
		query.setParameter("ano", ano.intValue());
		query.setParameter("idMembro", idMembro);
		try {
			return query.getResultList();
		} catch (NoResultException e) {
			return null;
		}
	}
	@SuppressWarnings("unchecked")
	public List<Dizimo> consultarListaDizimoMembro(long idMembro){
		Query query = entityManager.createQuery("select d from Dizimo d where d.membro.idMembro = :idMembro");
		query.setParameter("idMembro", idMembro);
		try {
			return query.getResultList();
		} catch (NoResultException e) {
			return null;
		}
	}


}
